package persistencia;

import bitclub.Alquiler;
import bitclub.ArticuloAlquilado;
import bitclub.Cliente;
import bitclub.Trabajador;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;

/**
 * @author Bit Company
 */
public class PAlquiler {

    public static void nuevoBD(Alquiler alquiler) {

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        String cadenaSQL = "";

        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();


            //Pasamos la cadena del INSERT a la base de datos

            if (alquiler.getTrabajador() != null) {

                cadenaSQL = "INSERT INTO ALQUILERES (CLIENTE_ID, F_ALQUILER,"
                        + " TRABAJADOR_ID, PRECIO_ALQUILER, PRECIO_RECARGO) "
                        + "VALUES (" + alquiler.getCliente().getId() + ",'"
                        + dateFormat.format(alquiler.getFechaAlquiler()) + "', "
                        + alquiler.getTrabajador().getId() + ", "
                        + alquiler.getPrecioAlquiler() + ", " + alquiler.getPrecioRecargo() + ")";
            } else {
                cadenaSQL = "INSERT INTO ALQUILERES (CLIENTE_ID, F_ALQUILER,"
                        + "PRECIO_ALQUILER, PRECIO_RECARGO) "
                        + "VALUES (" + alquiler.getCliente().getId() + ",'"
                        + dateFormat.format(alquiler.getFechaAlquiler()) + "', "
                        + alquiler.getPrecioAlquiler() + ", " + alquiler.getPrecioRecargo() + ")";
            }
            statement.executeUpdate(cadenaSQL);

            resultSet = statement.executeQuery("SELECT ID FROM ALQUILERES ORDER BY ID DESC");
            if (resultSet.next()) {
                alquiler.setId(resultSet.getInt("id"));
            }

            PArticuloAlquilado.nuevoBD(alquiler.getListArticulos(), alquiler.getId());

        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
    }

    public static void actualizarBD(Alquiler alquiler) {
        Connection connection = null;
        Statement statement = null;

        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");

        String cadenaSQL = "";

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();

            //Pasamos la cadena del UPDATE a la base de datos

            //no se ha metido trabajador id para q no se modifique quien hizo el alquiler
            cadenaSQL = "UPDATE ALQUILERES SET"
                    + " CLIENTE_ID=" + alquiler.getCliente().getId()
                    + ", F_ALQUILER='" + dateFormat.format(alquiler.getFechaAlquiler())
                    + "'PRECIO_ALQUILER=" + alquiler.getPrecioAlquiler()
                    + ", PRECIO_RECARGO=" + alquiler.getPrecioRecargo()
                    + " WHERE ID=" + alquiler.getId();


            statement.executeUpdate(cadenaSQL);

        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
    }

    public static List<Alquiler> seleccionarAlquilerClienteBD(Cliente cliente) {
        //Lista de alquileres que devolveremos
        List<Alquiler> listAlquileres = new ArrayList();
        int id=cliente.getId();

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Alquiler alquiler;
            Trabajador trabajador=null;
            TreeSet<ArticuloAlquilado> listArticulosAlquilados = new TreeSet();

            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();
            resultSet = statement.executeQuery("SELECT id, cliente_id, f_alquiler, id, trabajador_id, precio_alquiler, precio_recargo FROM alquileres WHERE cliente_id = '" + id + "'");

            while (resultSet.next()) {

                cliente = PCliente.seleccionarPorNumClienteBD(resultSet.getInt("cliente_id"));
                listArticulosAlquilados = PArticuloAlquilado.seleccionarArticuloAlquiladoIddeAlquilerBD(resultSet.getInt("id"));
                if (resultSet.getInt("trabajador_id")!=-1) {
                    trabajador = PTrabajador.seleccionarPorIdBD(resultSet.getInt("trabajador_id"));
                }

                alquiler = new Alquiler();

                alquiler.setId(resultSet.getInt("id"));
                alquiler.setCliente(cliente);
                alquiler.setFechaAlquiler(dateFormat.parse(resultSet.getString("f_alquiler")));
                alquiler.setListArticulos(listArticulosAlquilados);
                alquiler.setPrecioAlquiler(resultSet.getDouble("precio_alquiler"));
                alquiler.setPrecioRecargo(resultSet.getDouble("precio_recargo"));
                alquiler.setTrabajador(trabajador);

                listAlquileres.add(alquiler);
            }
        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }

        return listAlquileres;
    }
}